home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / UNIXLIB37B / test / c / malloctest < prev    next >
Text File  |  1992-12-30  |  2KB  |  158 lines

  1. /* test suite for malloc(3),realloc(3), and free(3) */
  2.  
  3. /* (c) Copyright 1990 H.Rogers */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #ifdef __STDC__
  8. #include <stdlib.h>
  9. #else
  10. extern void srand();
  11. extern int rand();
  12. extern void *malloc();
  13. extern void *realloc();
  14. extern void free();
  15. #endif
  16. #include <time.h>
  17.  
  18. #ifndef ARCH
  19. #ifdef __STDC__
  20. extern void __initalloc(void);
  21. #else
  22. extern void __initalloc();
  23. #endif
  24. #endif
  25.  
  26. #define NBLK 512
  27. #define BLKSIZ 2048
  28.  
  29. #ifdef M_DEBUG
  30. #ifdef __STDC__
  31. extern void __m_debug(void);
  32. #else
  33. extern void __m_debug();
  34. #endif
  35. #else
  36. #ifdef __STDC__
  37. static void __m_debug(void) { }
  38. #else
  39. static void __m_debug() { }
  40. #endif
  41. #endif
  42.  
  43. #ifdef __STDC__
  44. static void *alloc(register size_t z)
  45. #else
  46. static void *alloc(z)
  47. register size_t z;
  48. #endif
  49. {
  50. register void *r;
  51.  
  52. r = malloc(z); if (r) memset(r,0xff,z);
  53.  
  54. return(r);
  55. }
  56.  
  57. #ifdef __STDC__
  58. static void *ralloc(register void *r,register size_t z)
  59. #else
  60. static void *ralloc(r,z)
  61. register void *r;
  62. register size_t z;
  63. #endif
  64. {
  65. r = realloc(r,z); if (r) memset(r,0xff,z);
  66.  
  67. return(r);
  68. }
  69.  
  70. int main(int argc,char **argv)
  71. {
  72. void *m[NBLK];
  73. int i,j;
  74. void *k;
  75.  
  76. #ifndef ARCH
  77. __initalloc();
  78. #endif
  79.  
  80. if (argc < 2) srand(0); else srand(atoi(argv[1]));
  81.  
  82. printf("stage: 1\n");
  83.  
  84. for (i = 0; i < NBLK; i++)
  85.   m[i] = alloc(rand() & (BLKSIZ-1));
  86.  
  87. __m_debug();
  88.  
  89. printf("stage: 2\n");
  90.  
  91. for (i = 0; i < NBLK; i++)
  92.   if (m[i])
  93.     {
  94.     j = rand() & (BLKSIZ-1);
  95.     k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
  96.     }
  97.  
  98. __m_debug();
  99.  
  100. printf("stage: 3\n");
  101.  
  102. for (i = 0; i < (NBLK>>2); i++)
  103.   {
  104.   j = rand() & (NBLK-1);
  105.   if (m[j]) { free(m[j]); m[j] = 0; }
  106.   }
  107.  
  108. __m_debug();
  109.  
  110. printf("stage: 4\n");
  111.  
  112. for (i = 0; i < NBLK; i++)
  113.   if (m[i])
  114.     {
  115.     j = rand() & (BLKSIZ-1);
  116.     k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
  117.     }
  118.  
  119. __m_debug();
  120.  
  121. printf("stage: 5\n");
  122.  
  123. for (i = 0; i < (NBLK>>2); i++)
  124.   {
  125.   j = rand() & (NBLK-1);
  126.   if (m[j]) { free(m[j]); m[j] = 0; }
  127.   }
  128.  
  129. __m_debug();
  130.  
  131. printf("stage: 6\n");
  132.  
  133. for (i = 0; i < NBLK; i++)
  134.   if (!m[i]) m[i] = alloc(rand() & (BLKSIZ-1));
  135.  
  136. __m_debug();
  137.  
  138. printf("stage: 7\n");
  139.  
  140. for (i = 0; i < NBLK; i++)
  141.   if (m[i])
  142.     {
  143.     j = rand() & (BLKSIZ-1);
  144.     k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
  145.     }
  146.  
  147. __m_debug();
  148.  
  149. printf("stage: 8\n");
  150.  
  151. for (i = 0; i < NBLK; i++)
  152.   if (m[i]) free(m[i]);
  153.  
  154. __m_debug();
  155.  
  156. return(0);
  157. }
  158.